home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
021-030
/
amok29
/
m2druka
/
druka.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
24KB
|
685 lines
(*-----------------------------------------------------------------------------
:Program. druka.mod
:Author. Rolf Kersten
:Address. Ruetscher Str.121/416
:Phone. 0241/894364
:Copyright. Public Domain
:Language. Modula-2
:Translator. M2Amiga Modula-2 V3.2
:Update. Version 1.03, 12.11.88
:Update. Version 1.05, 27.11.88
:Update. Version 1.06, 29.07.89 Anpassung an Level-Konzept
:Update. Version 1.1, 16.09.89 Initialisierungs-Sequenzen können
:Update. eingegeben werden und mehr
:Contents. Druka druckt ASCII-Files in verschiedenen Schriftgrößen, mit
:Remark. Kopf und Perforationssprung
:Remark. Usage: CLI: (run) druka <filename>
:Remark. WB : dclick icon (+filename-icon)
-----------------------------------------------------------------------------*)
MODULE druka;
FROM Arts IMPORT Assert,TermProcedure,CurrentLevel,Requester;
FROM SYSTEM IMPORT ADDRESS,ADR,BYTE,CAST;
FROM Intuition IMPORT ActivationFlags, ActivationFlagSet, boolGadget,
Border, CloseWindow, Gadget, GadgetFlags,
GadgetFlagSet, GadgetPtr, IDCMPFlags, IDCMPFlagSet,
IntuiMessage, IntuiText, IntuiTextPtr, NewWindow,
OpenWindow, PrintIText, RefreshWindowFrame,
ScreenFlags, ScreenFlagSet, strGadget, StringInfo,
WindowFlags, WindowFlagSet, WindowPtr;
FROM Graphics IMPORT jam1;
FROM Dos IMPORT Write,Lock,UnLock,FileLockPtr,FileHandlePtr,Open,
Close,Read,dosName,newFile,accessRead;
FROM Exec IMPORT GetMsg,ReplyMsg,WaitPort;
FROM Strings IMPORT Length,Insert,Copy,Delete,Occurs,first,last;
FROM Storage IMPORT ALLOCATE,DEALLOCATE,Available;
FROM FileSystem IMPORT Lookup,ReadChar,File;
IMPORT FileSystem;
FROM Arguments IMPORT GetArg;
(*---------------------------------------------------------------------------*)
TYPE Title = ARRAY [0..70] OF CHAR;
BufferTyp = ARRAY [0..80] OF CHAR;
ZeilenZeiger = POINTER TO Zeile;
Zeile = RECORD
Vorige : ZeilenZeiger;
Folgende : ZeilenZeiger;
Text : ARRAY [1..80] OF CHAR;
END;
(*---------------------------------------------------------------------------*)
VAR MyWindow : NewWindow;
MyWindowPtr : WindowPtr;
WindowTitle : Title;
msgclass : IDCMPFlagSet;
IntuiMsg : POINTER TO IntuiMessage;
MyIntuiSText : ARRAY [0..5] OF IntuiText;
MyIntuiText : ARRAY [0..7] OF IntuiText;
StringGadget : ARRAY [0..7] OF Gadget;
Schalter : ARRAY [1..6] OF Gadget;
CurrentGad : GadgetPtr;
Info : ARRAY [0..7] OF StringInfo;
Rahmen,Srahmen1,Srahmen2,Srahmen3 : Border;
xyFeld,sxyFeld,pxyFeld1,pxyFeld2 : ARRAY [0..9] OF INTEGER;
KText : ARRAY [0..5],[0..9] OF CHAR;
MyText : ARRAY [0..7],[0..45] OF CHAR;
tzahl : ARRAY [1..2] OF CHAR;
Schrift : ARRAY [1..79] OF CHAR;
InitSequenz,SchmalSequenz,NLQSequenz,
SubscriptSequenz,ItalicsSequenz : ARRAY [0..39] OF CHAR;
InitLaenge,SchmalLaenge,NLQLaenge,
SubscriptLaenge,ItalicsLaenge : INTEGER;
Dateiname : BufferTyp;
Buffer : ARRAY [0..5] OF BufferTyp;
UndoBuffer : ARRAY [0..5] OF BufferTyp;
Buffer6,Buffer7,UndoBuffer6,
UndoBuffer7 : ARRAY [0..3] OF CHAR;
Schmal,NLQ,Subscript,Italics,
Kopfzeile,quit,alarm,fflag,pflag : BOOLEAN;
laenge : INTEGER;
lflag,dflag : FileLockPtr;
VolumeName : ARRAY [0..29] OF CHAR;
i : LONGCARD;
erfolg,geschrieben : LONGINT;
textzeilen,seitenzahl,zeilenzahl,l,m : LONGINT;
LinePtr,OldLinePtr,FirstLinePtr : ZeilenZeiger;
ff : File;
drucker : FileHandlePtr;
DrukaLevel : INTEGER;
(*---------------------------------------------------------------------------*)
(* Ciao: Arts.TermProcedure, wird bei gewolltem und ungewollten
Programmabruch aufgerufen, schließt alles, was offen herumliegt. *)
(*---------------------------------------------------------------------------*)
PROCEDURE Ciao;
BEGIN
IF DrukaLevel >= CurrentLevel() THEN
IF pflag THEN Close(drucker) END;
IF fflag THEN FileSystem.Close(ff) END;
CloseWindow(MyWindowPtr);
END;
END Ciao;
(*---------------------------------------------------------------------------*)
PROCEDURE DruckChar(k : FileHandlePtr; ch : CHAR);
BEGIN
IF k # NIL THEN
geschrieben := Write(k,ADR(ch),SIZE(ch));
END;
END DruckChar;
(*---------------------------------------------------------------------------*)
PROCEDURE DruckUmlaut(umdruck : FileHandlePtr; Umlaut : CHAR);
BEGIN
DruckChar(umdruck,CHR(27));
DruckChar(umdruck,"R"); (* Deutschen Zeichensatz ein... *)
DruckChar(umdruck,CHR(2));
DruckChar(umdruck,Umlaut);
DruckChar(umdruck,CHR(27));
DruckChar(umdruck,"R"); (* ...und wieder aus *)
DruckChar(umdruck,CHR(0));
END DruckUmlaut;
(*---------------------------------------------------------------------------*)
PROCEDURE DruckString(k : FileHandlePtr; str: ARRAY OF CHAR);
BEGIN
IF k # NIL THEN
geschrieben := Write(k,ADR(str),SIZE(str));
END;
END DruckString;
(*---------------------------------------------------------------------------*)
PROCEDURE DruckLn(k : FileHandlePtr);
VAR LF : CHAR;
BEGIN
LF := 12C;
IF k # NIL THEN
geschrieben := Write(k,ADR(LF),SIZE(LF));
END;
END DruckLn;
(*---------------------------------------------------------------------------*)
PROCEDURE Schlagalarm (alarmtext : ARRAY OF CHAR): BOOLEAN;
BEGIN
alarm := Requester(ADR("druka:"),ADR(alarmtext),
NIL,ADR("Weiter"));
RETURN alarm;
END Schlagalarm;
(*---------------------------------------------------------------------------*)
PROCEDURE MakeLine(VAR lnPtr : ZeilenZeiger) : BOOLEAN;
BEGIN
IF Available(SIZE(Zeile)) THEN
ALLOCATE (lnPtr,SIZE(Zeile));
WITH lnPtr^ DO
Vorige := NIL;
Folgende := NIL;
Text[1] := 0C;
END;
RETURN TRUE;
ELSE
lnPtr := NIL;
RETURN FALSE;
END;
END MakeLine;
(*---------------------------------------------------------------------------*)
PROCEDURE FindFirstLine(lnPtr : ZeilenZeiger ) : ZeilenZeiger;
BEGIN
WHILE lnPtr^.Vorige # NIL DO
lnPtr := lnPtr^.Vorige;
END;
RETURN lnPtr;
END FindFirstLine;
(*---------------------------------------------------------------------------*)
PROCEDURE Ladetext ( Filename : ARRAY OF CHAR );
BEGIN
fflag := TRUE;
Lookup(ff,Filename,2000,FALSE); (* 2000 = Buffergröße, Ladetext lädt *)
IF MakeLine(LinePtr) THEN; (* längere Files so 4x schneller *)
OldLinePtr := LinePtr;
quit := TRUE;
WHILE (LinePtr # NIL) AND (ff.eof = FALSE) DO
i := 0;
REPEAT
i := i+1;
ReadChar(ff,LinePtr^.Text[i]);
UNTIL ((LinePtr^.Text[i] = CHR(10)) OR (i = 80)) OR
(LinePtr^.Text[i] = CHR(13));
OldLinePtr := LinePtr;
IF MakeLine(LinePtr^.Folgende) THEN
LinePtr := LinePtr^.Folgende;
LinePtr^.Vorige := OldLinePtr;
END;
END;
fflag := FALSE; FileSystem.Close(ff)
END;
END Ladetext;
(*---------------------------------------------------------------------------*)
PROCEDURE BGad ( VAR Sch : Gadget; VAR nSch : Gadget;
VAR SchalterText : ARRAY OF CHAR; le : INTEGER );
BEGIN
WITH MyIntuiSText[le] DO
frontPen := 1 ; backPen := 0 ;
drawMode := jam1;
leftEdge := 1 ; topEdge := 2;
nextText := NIL;
iText := ADR(SchalterText);
END;
WITH Sch DO
nextGadget := ADR(nSch);
leftEdge := le*100+20 ; topEdge := 35;
width := 80 ; height := 11;
flags := GadgetFlagSet{};
activation := ActivationFlagSet{gadgImmediate,relVerify,toggleSelect};
gadgetType := boolGadget;
gadgetRender := ADR(Rahmen);
selectRender := NIL;
gadgetText := ADR(MyIntuiSText[le]);
specialInfo := NIL;
gadgetID := le+1;
userData := NIL;
END;
IF Sch.gadgetID = 6 THEN
Sch.activation := ActivationFlagSet{gadgImmediate,relVerify}
END;
END BGad;
(*---------------------------------------------------------------------------*)
PROCEDURE PrefGad (VAR Pref : Gadget; VAR nPref : Gadget;
ID : INTEGER; left,top,length : INTEGER;
VAR border : Border; VAR info : StringInfo);
BEGIN
WITH Pref DO
nextGadget := ADR(nPref);
leftEdge := left; topEdge := top;
width := length; height := 10;
flags := GadgetFlagSet{};
activation := ActivationFlagSet{gadgImmediate,relVerify,toggleSelect};
gadgetType := strGadget;
gadgetRender := ADR(border);
selectRender := NIL;
gadgetText := NIL;
specialInfo := ADR(info);
gadgetID := ID;
userData := NIL;
END;
END PrefGad;
(*---------------------------------------------------------------------------*)
PROCEDURE InitInfo (VAR Info : StringInfo;
VAR Buffer,UndoBuffer : ARRAY OF CHAR);
BEGIN
WITH Info DO
buffer := ADR(Buffer) ; undoBuffer := ADR(UndoBuffer) ;
bufferPos := 0 ; maxChars := SIZE(Buffer) ; dispPos := 0 ;
numChars := SIZE(Buffer);
END ;
END InitInfo;
(*---------------------------------------------------------------------------*)
PROCEDURE InitBorder (VAR Rahmen : Border; VAR sxyfeld : ARRAY OF INTEGER);
BEGIN
WITH Rahmen DO
leftEdge := -1 ; topEdge := -2; (* Rahmen des Eingabegadgets *)
frontPen := 1; backPen := 0;
drawMode := jam1;
count := 5; xy := ADR(sxyfeld);
nextBorder := NIL;
END;
END InitBorder;
(*---------------------------------------------------------------------------*)
PROCEDURE SetzeRahmen (VAR sxyfeld : ARRAY OF INTEGER; length : INTEGER);
BEGIN
sxyfeld[0] := 0; sxyfeld[1] := 0;
sxyfeld[2] := length; sxyfeld[3] := 0;
sxyfeld[4] := length; sxyfeld[5] := 12;
sxyfeld[6] := 0; sxyfeld[7] := 12;
sxyfeld[8] := 0; sxyfeld[9] := 0;
END SetzeRahmen;
(*---------------------------------------------------------------------------*)
PROCEDURE SetzeText (num : INTEGER; left,top : INTEGER);
VAR nText : IntuiTextPtr;
BEGIN
IF num < 7 THEN
nText := ADR(MyIntuiText[num+1]);
ELSE
nText := NIL;
END;
WITH MyIntuiText[num] DO
frontPen := 3 ; backPen := 0 ;
drawMode := jam1;
leftEdge := left ; topEdge := top;
nextText := nText;
iTextFont := NIL;
iText := ADR(MyText[num]);
END;
END SetzeText;
(*---------------------------------------------------------------------------*)
PROCEDURE Auswertung (VAR Buffer : ARRAY OF CHAR;
VAR Ergebnis : ARRAY OF CHAR; VAR laenge : INTEGER);
VAR i,h : INTEGER;
PROCEDURE HexAuswertung;
PROCEDURE HexToDez;
BEGIN
INC(i);
CASE Buffer[i] OF
"0".."9" : h := h + INTEGER(Buffer[i])-ORD("0");
| "A".."F",
"a".."f" : h := h + INTEGER(Buffer[i])-ORD("A");
ELSE alarm := Schlagalarm("Fehler in Hexzahl");
END; (* CASE *);
END HexToDez;
BEGIN
h := 0;
HexToDez;
h := h*16;
HexToDez;
INC(laenge);
Ergebnis[laenge] := CHR(h);
INC(i);
IF (Buffer[i] # ";") AND (Buffer[i] #"'") THEN
HexAuswertung;
ELSE INC(i);
END;
END HexAuswertung;
PROCEDURE ASCAuswertung;
BEGIN
WHILE Buffer[i+1] # "'" DO
INC(i); INC(laenge);
Ergebnis[laenge] := Buffer[i];
END;
INC(i,2);
END ASCAuswertung;
PROCEDURE DezAuswertung;
BEGIN
h := 0;
WHILE ("0" <= Buffer[i]) AND (Buffer[i] <= "9") DO
h := h*10 + INTEGER(Buffer[i])-ORD("0");
INC(i);
END;
IF h <= 255 THEN
INC(laenge);
Ergebnis[laenge] := CHR(h);
ELSE
alarm := Schlagalarm("Fehler in Dezimalzahl");
END;
END DezAuswertung;
BEGIN
laenge := -1; i := 0;
REPEAT
CASE Buffer[i] OF
"$" : HexAuswertung;
| "'" : ASCAuswertung;
| ";" : INC(i);
| ELSE DezAuswertung;
END;
UNTIL i >= Length(Buffer)-1;
END Auswertung;
(*---------------------------------------------------------------------------*)
PROCEDURE DAusgabe;
BEGIN
drucker := Open(ADR("PAR:"),newFile);
pflag := TRUE;
FOR i := 0 TO InitLaenge DO
DruckChar (drucker,InitSequenz[i]);
END;
IF Schmal THEN
FOR i := 0 TO SchmalLaenge DO
DruckChar (drucker,SchmalSequenz[i]);
END;
END;
IF NLQ AND (NOT(Schmal) AND NOT(Subscript)) THEN
FOR i := 0 TO NLQLaenge DO
DruckChar (drucker,NLQSequenz[i]);
END;
END;
IF Italics THEN
FOR i := 0 TO ItalicsLaenge DO
DruckChar (drucker,ItalicsSequenz[i]);
END;
END;
IF Subscript THEN
FOR i := 0 TO SubscriptLaenge DO
DruckChar (drucker,SubscriptSequenz[i]);
END;
END;
(*---------------- Berechnung von Zeilen- und Seitenzahl -------------------*)
textzeilen := 0;
LinePtr := FindFirstLine(OldLinePtr);
OldLinePtr := LinePtr;
WHILE LinePtr # NIL DO
textzeilen := textzeilen+1;
LinePtr := LinePtr^.Folgende;
END;
IF Subscript THEN zeilenzahl := Info[7].longInt;
ELSE zeilenzahl := Info[6].longInt; END;
IF Kopfzeile THEN zeilenzahl := zeilenzahl-5; END;
seitenzahl := textzeilen DIV zeilenzahl;
IF (textzeilen MOD zeilenzahl) # 0 THEN seitenzahl := seitenzahl+1; END;
IF (textzeilen < zeilenzahl ) THEN seitenzahl := 1; END;
LinePtr := FindFirstLine(OldLinePtr);
OldLinePtr := LinePtr;
(*------------------------------ Druckschleife -----------------------------*)
l := Occurs(Dateiname,first,":",FALSE);
IF l # last THEN
Delete(Dateiname,first,l);
Insert(Dateiname,first,VolumeName);
END;
Schrift := "Dateiname : ";
Insert(Schrift,13,Dateiname);
Insert(Schrift,66,"Seite : /");
tzahl[1] := CHR((seitenzahl DIV 10)+ORD("0"));
IF tzahl[1] = "0" THEN tzahl[1] := " " END;
tzahl[2] := CHR((seitenzahl MOD 10)+ORD("0"));
Insert(Schrift,77,tzahl);
l := 0 ;
REPEAT
l := l+1;
IF Kopfzeile THEN
FOR m := 1 TO 79 DO
DruckChar(drucker,"-");
END;
DruckLn(drucker);
tzahl[1] := CHR((l DIV 10)+ORD("0"));
IF tzahl[1] = "0" THEN tzahl[1] := " " END;
tzahl[2] := CHR((l MOD 10)+ORD("0"));
Delete(Schrift,74,2);
Insert(Schrift,74,tzahl);
DruckString(drucker,Schrift);
DruckLn(drucker);
FOR m := 1 TO 79 DO
DruckChar(drucker,"-");
END;
DruckLn(drucker);
END;
FOR m := 1 TO zeilenzahl DO
IF LinePtr # NIL THEN
FOR i := 1 TO Length(LinePtr^.Text) DO
CASE LinePtr^.Text[i] OF
"ä" : DruckUmlaut(drucker,CHR(123))
| "ö" : DruckUmlaut(drucker,CHR(124))
| "ü" : DruckUmlaut(drucker,CHR(125))
| "ß" : DruckUmlaut(drucker,CHR(126))
| "Ä" : DruckUmlaut(drucker,CHR(91))
| "Ö" : DruckUmlaut(drucker,CHR(92))
| "Ü" : DruckUmlaut(drucker,CHR(93))
| ELSE DruckChar(drucker,LinePtr^.Text[i])
END
END;
LinePtr := LinePtr^.Folgende;
ELSE
DruckLn(drucker);
END;
END;
DruckChar(drucker,CHR(12));
UNTIL l = seitenzahl;
IF drucker # NIL THEN pflag := FALSE; Close(drucker) END;
END DAusgabe;
(*---------------------------------------------------------------------------*)
PROCEDURE Drucke;
BEGIN
lflag := Lock(ADR(Dateiname),accessRead);
Copy(VolumeName,lflag^.volume^.name^,1,30);
UnLock(lflag);
dflag := Lock(ADR("par:"),2);
UnLock(dflag);
IF lflag = NIL THEN
alarm := Schlagalarm("Datei nicht gefunden!")
ELSE
Ladetext (Dateiname);
alarm := Requester(ADR("druka:"),ADR("Drucker eingeschaltet?"),
ADR("Abbruch"),ADR("Druck!"));
IF alarm = FALSE THEN
DAusgabe;
END;
END;
END Drucke;
(*---------------------------------------------------------------------------*)
PROCEDURE Positiv(gptr : GadgetPtr );
BEGIN
CASE gptr^.gadgetID OF
| 1 : Schmal := NOT(Schmal);
| 2 : NLQ := NOT(NLQ);
| 3 : Subscript := NOT(Subscript);
| 4 : Italics := NOT(Italics);
| 5 : Kopfzeile := NOT(Kopfzeile);
| 6 : IF Info[0].buffer # NIL THEN
FOR i := 0 TO 80 DO
Dateiname[i] := Buffer[0,i];
END;
END;
IF Length(Dateiname) # 0 THEN
Drucke;
END;
| 11 : Auswertung(Buffer[1],InitSequenz,InitLaenge);
| 12 : Auswertung(Buffer[2],SchmalSequenz,SchmalLaenge);
| 13 : Auswertung(Buffer[3],NLQSequenz,NLQLaenge);
| 14 : Auswertung(Buffer[4],ItalicsSequenz,ItalicsLaenge);
| 15 : Auswertung(Buffer[5],SubscriptSequenz,SubscriptLaenge);
| ELSE
END;
END Positiv;
(*---------------------------------------------------------------------------*)
(* Hauptprogramm *)
(*---------------------------------------------------------------------------*)
BEGIN
(*--------------------------- Initialisierung -------------------------------*)
Schmal := FALSE; NLQ := FALSE; Subscript := FALSE; Italics := FALSE;
Kopfzeile := FALSE;
Buffer[1] := "28'@'13;27'x'0;27'C'0;11;27'R'0;"; (* InitSequenz *)
Buffer[2] := "27'M'28'S'1;27'l'20;"; (* SchmalSequenz *)
Buffer[3] := "27'x'1;"; (* NLQSequenz *)
Buffer[4] := "27'4';"; (* ItalicsSequnz *)
Buffer[5] := "27'S'1;27'3'20;"; (* SubscriptSequenz *)
Buffer6 := "62"; Info[6].longInt := 62; (* Anzahl Zeilen normal *)
Buffer7 := "93"; Info[7].longInt := 93; (* Anzahl Zeilen subscript *)
DrukaLevel := CurrentLevel();
TermProcedure(Ciao);
WindowTitle := "DRUKA V1.2 [hG] 16.Sept.1989";
WITH MyWindow DO
leftEdge := 0 ; topEdge := 10 ;
width := 640 ; height := 50 ;
detailPen := 0 ; blockPen := 1 ;
idcmpFlags := IDCMPFlagSet{closeWindow,newSize,gadgetUp,gadgetDown} ;
flags := WindowFlagSet{windowSizing,windowDrag,windowDepth,
windowClose,windowRefresh,activate} ;
firstGadget := ADR(Schalter[1]) ;
checkMark := NIL ;
title := ADR(WindowTitle) ;
bitMap := NIL ;
type := ScreenFlagSet{wbenchScreen} ;
minWidth := 125 ; maxWidth := 640 ;
minHeight := 20 ; maxHeight :=140 ;
END ;
WITH Rahmen DO
leftEdge := -1 ; topEdge := -1 ; (* Rahmen der Auswahlgadgets *)
frontPen := 1 ; backPen := 0 ;
drawMode := jam1 ;
count := 5 ; xy := ADR(xyFeld) ;
nextBorder := NIL ;
END ;
SetzeRahmen(xyFeld,81);
InitBorder (Srahmen1,sxyFeld); SetzeRahmen (sxyFeld,481);
InitBorder (Srahmen2,pxyFeld1); SetzeRahmen (pxyFeld1,401);
InitBorder (Srahmen3,pxyFeld2); SetzeRahmen (pxyFeld2,33);
DEC(pxyFeld2[5]); DEC(pxyFeld2[7]);
Buffer[0]:= " ";
laenge := 80;
GetArg(1,Buffer[0],laenge); (* Übername des Dateinamens von dem *)
UndoBuffer[0] := " " ; (* Programmaufrufsargument *)
(*-------------------------- Setze Gadgets ---------------------------------*)
InitInfo(Info[0],Buffer[0],UndoBuffer[0]);
InitInfo(Info[1],Buffer[1],UndoBuffer[1]);
InitInfo(Info[2],Buffer[2],UndoBuffer[2]);
InitInfo(Info[3],Buffer[3],UndoBuffer[3]);
InitInfo(Info[4],Buffer[4],UndoBuffer[4]);
InitInfo(Info[5],Buffer[5],UndoBuffer[5]);
InitInfo(Info[6],Buffer6,UndoBuffer6);
InitInfo(Info[7],Buffer7,UndoBuffer7);
KText[0] := " Schmal "; BGad (Schalter[1],Schalter[2],KText[0],0);
KText[1] := " NLQ "; BGad (Schalter[2],Schalter[3],KText[1],1);
KText[2] := "Subscript"; BGad (Schalter[3],Schalter[4],KText[2],2);
KText[3] := " Italics "; BGad (Schalter[4],Schalter[5],KText[3],3);
KText[4] := "Kopfzeile"; BGad (Schalter[5],Schalter[6],KText[4],4);
KText[5] := " Druck ! "; BGad (Schalter[6],StringGadget[0],KText[5],5);
PrefGad (StringGadget[0],StringGadget[1],10,120,14,480,
Srahmen1,Info[0]); (* Dateiname *)
INCL(StringGadget[0].activation,stringCenter);
PrefGad (StringGadget[1],StringGadget[2],11,165,55,400,
Srahmen2,Info[1]); (* init *)
PrefGad (StringGadget[2],StringGadget[3],12,165,69,400,
Srahmen2,Info[2]); (* Schmal *)
PrefGad (StringGadget[3],StringGadget[4],13,165,83,400,
Srahmen2,Info[3]); (* NLQ *)
PrefGad (StringGadget[4],StringGadget[5],14,165,97,400,
Srahmen2,Info[4]); (* Italics *)
PrefGad (StringGadget[5],StringGadget[6],15,165,111,400,
Srahmen2,Info[5]); (* Subscript *)
PrefGad (StringGadget[6],StringGadget[7],16,165,125,33,
Srahmen3,Info[6]); (* Zeilen normal *)
INCL(StringGadget[6].activation,longint);
PrefGad (StringGadget[7],StringGadget[7],17,435,125,33,
Srahmen3,Info[7]); (* Zeilen sub *)
INCL(StringGadget[7].activation,longint);
StringGadget[7].nextGadget := NIL;
Auswertung(Buffer[1],InitSequenz,InitLaenge);
Auswertung(Buffer[2],SchmalSequenz,SchmalLaenge);
Auswertung(Buffer[3],NLQSequenz,NLQLaenge);
Auswertung(Buffer[4],ItalicsSequenz,ItalicsLaenge);
Auswertung(Buffer[5],SubscriptSequenz,SubscriptLaenge);
(*----------------------- Eröffne Programmfenster ---------------------------*)
MyText[0] := "Dateiname : "; SetzeText(0,20,15);
MyText[1] := " InitSequenz"; SetzeText(1,30,55);
MyText[2] := " SchmalSequenz"; SetzeText(2,30,69);
MyText[3] := " NLQSequenz"; SetzeText(3,30,84);
MyText[4] := " ItalicsSequenz"; SetzeText(4,30,97);
MyText[5] := "SubscriptSequenz"; SetzeText(5,30,111);
MyText[6] := "Zeilen/Seite normal"; SetzeText(6,8,125);
MyText[7] := "Zeilen/Seite subscript"; SetzeText(7,254,125);
MyWindowPtr := OpenWindow(MyWindow) ;
Assert(MyWindowPtr # NIL, ADR("Fenster nicht geöffnet"));
PrintIText (MyWindowPtr^.rPort,ADR(MyIntuiText[0]),0,0);
(*------- Hauptschleife, wartet auf Betätigung des Schließgadgets -----------*)
LOOP
WaitPort(MyWindowPtr^.userPort);
IntuiMsg := GetMsg(MyWindowPtr^.userPort) ;
WHILE IntuiMsg # NIL DO
msgclass := IntuiMsg^.class ; CurrentGad := IntuiMsg^.iAddress;
ReplyMsg(IntuiMsg) ;
IF (closeWindow IN msgclass) THEN
EXIT ;
ELSIF (gadgetUp IN msgclass) THEN
Positiv(CurrentGad);
ELSIF (newSize IN msgclass) THEN
PrintIText (MyWindowPtr^.rPort,ADR(MyIntuiText[0]),0,0);
END ;
IntuiMsg := GetMsg(MyWindowPtr^.userPort) ;
END ;
END ;
END druka.